<?php

namespace app\common\model;

use think\facade\Db;

class AlimamaPid
{


    public static function getPIdByAgentId($agentId){
        $obj = \app\model\AlimamaPid::where('agent_id',$agentId)->order('id','desc')->find();
        if (!$obj){
            return false;
        }
        return  $obj->pid;
    }

    /**
     * 动态分配 pid 给用户
     */
    public static function getPid($agentId, $userId)
    {
        $now = time();
        $info = Db::name('alimama_pid')
            ->field('id, pid, sub_pid')
            ->where('agent_id', $agentId)
            ->where('user_id', $userId)
            ->where('is_deleted', 0)
            ->find();
        if ($info) {
            // 已经有 pid，更新 pid 分配时间
            Db::name('alimama_pid')
                ->where('id', $info['id'])
                ->update([
                    'user_get_time' => $now,
                ]);
            return $info['pid'];
        }

        // 从未分配的 pid 中获取一个出来给用户
        $info = Db::name('alimama_pid')
            ->field('id, pid, sub_pid')
            ->where('agent_id', $agentId)
            ->where('user_id', 0)
            ->where('is_deleted', 0)
            ->find();
        if ($info) {
            Db::name('alimama_pid')
                ->where('id', $info['id'])
                ->update([
                    'user_id' => $userId,
                    'user_get_time' => $now,
                ]);

            // todo 添加 pid 变更日志
            Db::name('alimama_pid_history')
                ->insert([
                    'agent_id' => $agentId,
                    'sub_pid' => $info['sub_pid'],
                    'start_time' => $now,
                    'user_id' => $userId,
                ]);

            return $info['pid'];
        }

        // pid 分配完了，把其他人的抢过来 (最长时间没有活跃的)
        $info = Db::name('alimama_pid')
            ->field('id, pid, sub_pid, user_get_time')
            ->where('agent_id', $agentId)
            ->where('is_deleted', 0)
            ->order('user_get_time', 'asc')
            ->find();
        // 小于 10 分钟的，返回失败
        if (empty($info) || ($now - $info['user_get_time'] < 600)) {
            return false;
        }

        // todo 添加 pid 变更日志
        Db::name('alimama_pid_history')
            ->where('agent_id', $agentId)
            ->where('sub_pid', $info['sub_pid'])
            ->where('end_time', '4212121211')
            ->update([
                'end_time' => $now,
            ]);
        Db::name('alimama_pid_history')
            ->insert([
                'agent_id' => $agentId,
                'sub_pid' => $info['sub_pid'],
                'start_time' => $now,
                'user_id' => $userId,
            ]);

        Db::name('alimama_pid')
            ->where('id', $info['id'])
            ->update([
                'user_id' => $userId,
                'user_get_time' => $now,
            ]);
        return $info['pid'];
    }
}
